package com.jiusuzu.service.impl;

import java.io.FileReader;
import java.util.Date;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.jiusuzu.common.pojo.EUDataGridResult;
import com.jiusuzu.common.pojo.JiusuzuResult;
import com.jiusuzu.common.utils.IDUtils;
import com.jiusuzu.mapper.TbItemDescMapper;
import com.jiusuzu.mapper.TbItemMapper;
import com.jiusuzu.mapper.TbItemParamItemMapper;
import com.jiusuzu.pojo.TbItem;
import com.jiusuzu.pojo.TbItemDesc;
import com.jiusuzu.pojo.TbItemExample;
import com.jiusuzu.pojo.TbItemExample.Criteria;
import com.jiusuzu.pojo.TbItemParamItem;
import com.jiusuzu.service.ItemService;

/**
 * itemService实现类
 * 
 * @author 李锐洋
 */
@Service
public class ItemServiceImpl implements ItemService {

	@Autowired
	private TbItemMapper itemMapper;
	@Autowired
	private TbItemDescMapper itemDescMapper;
	@Autowired
	private TbItemParamItemMapper itemParamItemMapper;

	/**
	 * 根据商品id查询商品
	 */
	@Override
	public TbItem getItemById(long itemId) {
		TbItemExample example = new TbItemExample();
		Criteria criteria = example.createCriteria();
		criteria.andIdEqualTo(itemId);
		List<TbItem> list = itemMapper.selectByExample(example);
		if (list != null && list.size() > 0) {
			TbItem item = list.get(0);
			return item;
		}
		return null;
	}

	/**
	 * 获取分页商品
	 */
	@Override
	public EUDataGridResult getItemList(int page, int rows) {
		// 分页处理
		PageHelper.startPage(page, rows);
		// 执行查询
		TbItemExample example = new TbItemExample();
		List<TbItem> list = itemMapper.selectByExample(example);
		// 取分页信息
		PageInfo<TbItem> pageInfo = new PageInfo<>(list);
		// 返回处理结果
		EUDataGridResult result = new EUDataGridResult();
		result.setTotal(pageInfo.getTotal());
		result.setRows(list);
		return result;
	}

	/**
	 * 将新增商品存入数据库，并返回存取结果
	 * 
	 * @throws Exception
	 */
	@Override
	public JiusuzuResult saveItem(TbItem item, String desc, String itemParam) throws Exception {
		// item补全
		// 生成商品ID
		Long itemId = IDUtils.genItemId();
		item.setId(itemId);
		// '商品状态，1-正常，2-下架，3-删除',
		item.setStatus((byte) 1);
		item.setCreated(new Date());
		item.setUpdated(new Date());
		// 插入到数据库
		itemMapper.insert(item);
		// 添加商品描述信息
		JiusuzuResult result = insertItemDesc(itemId, desc);
		if (result.getStatus() != 200) {
			throw new Exception();
		}
		// 添加规格参数
		result = insertItemParamItem(itemId, itemParam);
		if (result.getStatus() != 200) {
			throw new Exception();
		}
		return JiusuzuResult.ok();
	}

	/**
	 * 添加商品描述
	 */
	private JiusuzuResult insertItemDesc(Long itemId, String desc) {
		TbItemDesc itemDesc = new TbItemDesc();
		itemDesc.setItemId(itemId);
		itemDesc.setItemDesc(desc);
		itemDesc.setCreated(new Date());
		itemDesc.setUpdated(new Date());
		itemDescMapper.insert(itemDesc);
		return JiusuzuResult.ok();
	}

	/**
	 * 更新商品描述
	 */
	private JiusuzuResult updateItemDesc(Long itemId, String desc) {
		TbItemDesc itemDesc = new TbItemDesc();
		itemDesc.setItemId(itemId);
		itemDesc.setItemDesc(desc);
		itemDesc.setUpdated(new Date());
		itemDescMapper.updateByPrimaryKey(itemDesc);
		return JiusuzuResult.ok();
	}

	/**
	 * 根据商品id下架多个商品（itemIds是一个包含多个id的字符串）
	 */
	@Override
	public JiusuzuResult updateItemUnShelve(String itemIds) {
		// 获取商品
		String[] strings = itemIds.split(",");

		for (String string : strings) {
			long itemId = Long.parseLong(string);
			TbItem item = getItemById(itemId);
			// '商品状态，1-正常，2-下架，3-删除',
			item.setStatus((byte) 2);
			item.setUpdated(new Date());
			itemMapper.updateByPrimaryKey(item);
		}
		return JiusuzuResult.ok();

	}

	/**
	 * 添加规格参数
	 */
	private JiusuzuResult insertItemParamItem(Long itemId, String itemParam) {
		// 创建一个pojo
		TbItemParamItem itemParamItem = new TbItemParamItem();
		itemParamItem.setItemId(itemId);
		itemParamItem.setParamData(itemParam);
		itemParamItem.setCreated(new Date());
		itemParamItem.setUpdated(new Date());
		// 向表中插入数据
		itemParamItemMapper.insert(itemParamItem);
		return JiusuzuResult.ok();
	}

	/**
	 * 更新商品规格参数
	 */
	private JiusuzuResult updateItemParamItem(Long itemId, String itemParam) {
		// 创建一个pojo
		TbItemParamItem itemParamItem = new TbItemParamItem();
		itemParamItem.setItemId(itemId);
		itemParamItem.setParamData(itemParam);
		itemParamItem.setUpdated(new Date());
		// 向表中插入数据
		itemParamItemMapper.updateByPrimaryKey(itemParamItem);
		return JiusuzuResult.ok();
	}

	/**
	 * 删除商品
	 */
	@Override
	public JiusuzuResult deleteItem(String itemIds) {
		// 获取商品
		String[] strings = itemIds.split(",");
		for (String string : strings) {
			long itemId = Long.parseLong(string);
			TbItem item = getItemById(itemId);
			// '商品状态，1-正常，2-下架，3-删除',
			item.setStatus((byte) 3);
			item.setUpdated(new Date());
			itemMapper.updateByPrimaryKey(item);
		}
		return JiusuzuResult.ok();
	}

	/**
	 * 上架已下架商品
	 */
	@Override
	public JiusuzuResult updateItemPutaway(String itemIds) {
		// 获取商品
		String[] strings = itemIds.split(",");
		for (String string : strings) {
			long itemId = Long.parseLong(string);
			TbItem item = getItemById(itemId);
			// '商品状态，1-正常，2-下架，3-删除',
			int status = item.getStatus();
			if (status != 3) {
				item.setStatus((byte) 1);
				item.setUpdated(new Date());
			}
			itemMapper.updateByPrimaryKey(item);
		}
		return JiusuzuResult.ok();
	}

	/**
	 * 编辑现有商品
	 */
	@Override
	public JiusuzuResult updateItemEdit(TbItem item, String desc, String itemParam) throws Exception {
		// 获取商品id
		Long itemId = item.getId();
		// '商品状态，1-正常，2-下架，3-删除',
		item.setStatus((byte) 1);
		item.setUpdated(new Date());
		// 更新到数据库
		itemMapper.updateItem(item);
		// 更新商品描述信息
		JiusuzuResult result = updateItemDesc(itemId, desc);
		if (result.getStatus() != 200) {
			throw new Exception();
		}
		// 更新商品规格参数
		result = insertItemParamItem(itemId, itemParam);
		if (result.getStatus() != 200) {
			throw new Exception();
		}
		return JiusuzuResult.ok();
	}

}
